home *** CD-ROM | disk | FTP | other *** search
/ Gekkan Dennou Club 147 / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan).7z / Gekkan Dennou Club - 2000.8 Vol. 147 (Japan) (Track 1).bin / games / hexrev / graph.c < prev    next >
C/C++ Source or Header  |  2000-06-25  |  4KB  |  158 lines

  1. /*****************************************************
  2.  
  3.     graph.c : 六角リバーシ用グラフィック関連
  4.  
  5.                 Copyright (C) 1997 by Makoto Hiroi
  6.  
  7. *****************************************************/
  8. #include    "hexrev.h"
  9.  
  10. #define    STR_COLOR    15
  11. #define    BG_COLOR    9
  12. #define    YELLOW        14
  13.  
  14. /* paint work area size */
  15. #define    WORKSIZE    1024
  16.  
  17. extern const short    zahyou[SIZE][2];
  18. extern int    first_move;
  19. extern int    level;
  20.  
  21. /* 画面を塗りつぶす */
  22. static void fill( int x1, int y1, int x2, int y2, int color )
  23. {
  24.     struct    _fillptr    buff;
  25.     buff.x1 = x1;
  26.     buff.y1 = y1;
  27.     buff.x2 = x2;
  28.     buff.y2 = y2;
  29.     buff.color = color;
  30.     _iocs_fill( &buff );
  31. }
  32.  
  33. /* 線を引く */
  34. static void line( int x1, int y1, int x2, int y2, int color )
  35. {
  36.     struct    _lineptr    buff;
  37.     buff.x1 = x1;
  38.     buff.y1 = y1;
  39.     buff.x2 = x2;
  40.     buff.y2 = y2;
  41.     buff.color = color;
  42.     buff.linestyle = 0xffff;
  43.     _iocs_line( &buff );
  44. }
  45.  
  46. /* ページ 1 へ文字を書く */
  47. static void print_string( int x, int y, int type, char *str, int color )
  48. {
  49.     struct _symbolptr    buff;
  50.     static    int font_size[3] = { 6, 8, 12 };        /* 文字数は半角で数えるので */
  51.     int        len = strlen( str );
  52.     int        x1 = x + (len * font_size[type] - 1);
  53.     int        y1 = y + (font_size[type] * 2 - 1);
  54.     _iocs_apage( 1 );            /* 文字はページ 1 へ */
  55.     fill( x, y, x1, y1, BG_COLOR );    /* クリア */
  56.     buff.x1 = x;
  57.     buff.y1 = y;
  58.     buff.string_address = str;
  59.     buff.mag_x = 1;
  60.     buff.mag_y = 1;
  61.     buff.color = color;
  62.     buff.font_type = type;
  63.     buff.angle = 0;
  64.     _iocs_symbol( &buff );
  65. }
  66.  
  67. /* 駒を描く */
  68. void draw_piece( int num, int piece )
  69. {
  70.     int        x = zahyou[num][0];
  71.     int        y = zahyou[num][1];
  72.     int        color = (piece == BLACK ? 1 : 15);
  73.     char    work[WORKSIZE];
  74.     struct    _paintptr    ptr;
  75.     struct    _circleptr    circle;
  76.     _iocs_apage( 0 );                    /* 石はページ 0 */
  77.  
  78.     circle.x = x;
  79.     circle.y = y;
  80.     circle.radius = 17;
  81.     circle.color = color;
  82.     circle.start = 0;
  83.     circle.end = 360;
  84.     circle.ratio = 256;
  85.     _iocs_circle( &circle );
  86.     ptr.x = x;
  87.     ptr.y = y;
  88.     ptr.color = color;
  89.     ptr.buf_start = work;
  90.     ptr.buf_end   = work + WORKSIZE;
  91.     _iocs_paint( &ptr );
  92. }
  93.  
  94. /* レベルを書く */
  95. void print_level( void )
  96. {
  97.     char    str[8];
  98.     sprintf( str, "LV%d", level );
  99.     print_string( 64 * 4 + 8, 480, 2, str, STR_COLOR );
  100. }
  101.  
  102. /* 先手、後手を表示 */
  103. void print_move( void )
  104. {
  105.     print_string( 64 * 5  + 8, 480, 2, (first_move ? "先手" : "後手"), STR_COLOR );
  106. }
  107.  
  108. /* パレットデータ */
  109. static unsigned short    palet_data[16] = {
  110. /*                          暗い赤    赤   明るい赤 暗い紫   紫    */
  111.     0x0000, 0x39CE, 0x5294, 0x0440, 0x0640, 0x3FCE, 0x0420, 0x056A,
  112. /* 明るい紫 暗い緑    緑   明るい緑 暗い黄   黄色  明るい黄  白    */
  113.     0x0738, 0x8000, 0xB000, 0xF800, 0x9F40, 0xC7C0, 0xEFC0, 0xFFFE,
  114. };
  115.  
  116. /* 画面の初期化 */
  117. void init_screen( void )
  118. {
  119.     int        i;
  120.     _dos_c_curoff();        /* カーソルオフ */
  121.     _dos_c_fnkmod( 2 );        /* ファンクションキーオフ */
  122.     _iocs_ms_init();        /* マウスの初期化 */
  123.     _iocs_ms_curon();        /* マウスを表示 */
  124.     _iocs_skey_mod(0,0,0);    /* ソフトウェアキーボード消去 */
  125.     _iocs_crtmod( 4 );        /* 512*512 16 colors */
  126.     _iocs_g_clr_on();        /* グラフィック表示 */
  127.     /* パレットデータの初期化 */
  128.     for( i = 0; i < 16; i++ ){
  129.         _iocs_gpalet( i, palet_data[i] );
  130.     }
  131.  
  132.     _iocs_apage( 2 );                    /* 背景はページ 2 */
  133.     fill( 0, 0, 511, 511, BG_COLOR );    /* 背景は暗い緑 */
  134.  
  135.     /* 六角形を描画する */
  136.     for( i = 0; i < SIZE; i++ ){
  137.         int        x = zahyou[i][0];
  138.         int        y = zahyou[i][1];
  139.         int        j;
  140.         static  int diff[7][2] = {
  141.             0, -22, -19, -11, -19, 11, 0, 22, 19, 11, 19, -11, 0, -22,
  142.         };
  143.         for( j = 0; j < 6; j++ ){
  144.             line( x + diff[j][0],     y + diff[j][1],
  145.                   x + diff[j + 1][0], y + diff[j + 1][1], 0 );
  146.         }
  147.     }
  148.  
  149.     print_string( 32, 480, 2, "六角Reversi", YELLOW );    /* 黄色 */
  150.     print_level();                /* レベル */
  151.     print_move();                /* 先手・後手 */
  152.     print_string( 64 * 6 + 8, 480, 2, "対局", STR_COLOR );
  153.     print_string( 64 * 7 + 8, 480, 2, "終了", STR_COLOR );
  154. }
  155.  
  156. /* end of file */
  157.  
  158.